package com.stgy.lease.common.handler;

import com.stgy.lease.common.exception.StgyException;
import com.stgy.lease.common.result.Result;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.exception.ExceptionUtils;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.RestControllerAdvice;

/**
 * ClassName:StgyGlobalExceptionHandler
 * Package:com.stgy.lease.common.handler
 * Description:全局异常处理器
 *
 * @Author:helei
 * @Create:2024/8/28 - 15:43
 */
@RestControllerAdvice //返回json
@Slf4j
//@ControllerAdvice 异常处理后返回转发重定向视图
public class StgyGlobalExceptionHandler {

    //异常处理器捕获controller接口的异常后 返回一个失败的result对象
    //1、最大异常的处理器
    @ExceptionHandler(Exception.class)
    public Result exception(Exception e) {
        //将异常的堆栈日志信息记录到日志中 堆栈日志包含了出现异常的原因 出现的类 行
        log.error(ExceptionUtils.getStackTrace(e));
        return Result.fail();
    }

    //2、自定义异常处理器
    @ExceptionHandler(StgyException.class)
    public Result exception(StgyException e) {
        if (e.getThrowable() != null) {
            //获取真实的堆栈日志打印
            log.error(ExceptionUtils.getStackTrace(e));
        }
        return Result.build(e.getCode(), e.getMessage(), false, null);
    }

}
